package com.cacho.s2b.lesson.learn;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * @Description BigDecimal 是java.math包中提供的线程安全API,用于表示任意精度数字的类，它可以表示无限长度的小数
 * @Author LingWei
 * @date 2024/01/28
 **/

public class LearnBigDecimal {
    public static void main(String[] args) {
        float f = 3.11f;
        BigDecimal c1 = new BigDecimal("3.11");
        BigDecimal c2 = new BigDecimal(f);
        BigDecimal c3 = new BigDecimal(3.11);
        // BigDecimal.setScale()方法用于格式化小数点
        BigDecimal c4 = c3.setScale(2, RoundingMode.HALF_UP); //  setScale(2)表示保留2位小数，HALF_UP=四舍五入方式
        BigDecimal c5 = c3.setScale(1, RoundingMode.UP); //  UP=直接进位
        System.out.println("c1通过 String 创建 BigDecimal 类型：" + c1); // 3.11
        System.out.println("c2通过 Float  创建 BigDecimal 类型：" + c2); // 3.1099998950958251953125
        System.out.println("c3处理 BigDecimal 类型：" + c3); // 3.109999999999999875655021241982467472553253173828125
        System.out.println("c4处理 BigDecimal 类型：" + c4); // 3.11
        System.out.println("c5处理 BigDecimal 类型：" + c5); // 3.12
        System.out.println("直接删除多余的小数位：" + new BigDecimal(2.36).setScale(1,RoundingMode.DOWN)); // 2.3
        System.out.println("直接删除多余的小数位：" + new BigDecimal(2.31).setScale(1,RoundingMode.UP)); // 2.4
        System.out.println("1.比较两个 BigDecimal是否相等：" + c1.compareTo(c2)); // c1>c2=1
        System.out.println("2.比较两个 BigDecimal是否相等：" + c1.compareTo(c4)); // c1=c4=0
        System.out.println("3.比较两个 BigDecimal是否相等：" + c1.compareTo(c5)); // c1<c5=-1
    }
}
